home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / AddOns / Components / TEECHART / Src Code / TEEXPORT.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1998-10-24  |  7.0 KB  |  258 lines

  1. {**********************************************}
  2. {   TeeChart Export Dialog                     }
  3. {   Copyright (c) 1996-98 by David Berneda     }
  4. {**********************************************}
  5. {$I teedefs.inc}
  6. unit TeExport;
  7.  
  8. interface
  9.  
  10. uses
  11.   WinTypes,WinProcs, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  12.   Dialogs, StdCtrls, ExtCtrls, TeeProcs
  13.   {$IFDEF TEEJPEG}
  14.   ,JPEG
  15.   {$ENDIF}
  16.   ;
  17.  
  18. type
  19.   TTeeExportForm = class(TForm)
  20.     Button1: TButton;
  21.     Button2: TButton;
  22.     RGFormat: TRadioGroup;
  23.     Button3: TButton;
  24.     SaveDialog1: TSaveDialog;
  25.     procedure Button1Click(Sender: TObject);
  26.     procedure Button2Click(Sender: TObject);
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure RGFormatClick(Sender: TObject);
  29.   private
  30.     { Private declarations }
  31.   public
  32.     { Public declarations }
  33.     ExportPanel:TCustomTeePanel;
  34.   end;
  35.  
  36. Procedure LoadTeeFromFile( Var ATree:TCustomTeePanel; Const AName:String);
  37. Procedure SaveTeeToFile(ATree:TCustomTeePanel; Const AName:String);
  38.  
  39. type TExportSaveProc=procedure(ExportPanel:TCustomTeePanel; Const AFileName:String);
  40.  
  41. Const TeeExportSave:TExportSaveProc=nil;
  42.  
  43. {$IFDEF TEEJPEG}
  44. procedure TeeSaveToJPEGFile( APanel:TCustomTeePanel;
  45.                              const FileName: WideString;
  46.                              Gray: WordBool;
  47.                              Performance: TJPEGPerformance;
  48.                              Quality, AWidth, AHeight: Integer);
  49. {$ENDIF}
  50.  
  51. implementation
  52.  
  53. {$R *.DFM}
  54. {$IFDEF D1}
  55. Uses TeeConst;
  56. {$ELSE}
  57. Uses TeeConst
  58.      {$IFDEF D3}
  59.      ,ExtDlgs
  60.      {$ENDIF}
  61.      ;
  62. {$ENDIF}
  63.  
  64. Procedure SaveTeeToStream(ATree:TCustomTeePanel; AStream:TStream);
  65. {var Writer : TWriter;}
  66. begin
  67.   AStream.WriteComponent(ATree);
  68. {  Writer := TWriter.Create(AStream, 4096);
  69.   With Writer do
  70.   try
  71.     RootAncestor:=nil;
  72.     Ancestor:= nil;
  73.     Root := ATree.Owner;
  74.     WriteSignature;
  75.     WriteComponent(ATree);
  76.   finally
  77.     Writer.Free;
  78.   end;}
  79. end;
  80.  
  81. Procedure SaveTeeToFile(ATree:TCustomTeePanel; Const AName:String);
  82. Var tmp : TFileStream;
  83.     OldVisible : Boolean;
  84. begin
  85.   tmp:=TFileStream.Create(AName,fmCreate);
  86.   try
  87.     OldVisible:=ATree.Visible;
  88.     ATree.Visible:=True;
  89.     try
  90.       SaveTeeToStream(ATree,tmp);
  91.     finally
  92.       ATree.Visible:=OldVisible;
  93.     end;
  94.   finally
  95.     tmp.Free;
  96.   end;
  97. end;
  98.  
  99. Procedure LoadTeeFromStream( Var ATree:TCustomTeePanel; AStream:TStream);
  100. begin
  101.   AStream.ReadComponent(ATree);
  102. end;
  103.  
  104. Procedure LoadTeeFromFile( Var ATree:TCustomTeePanel; Const AName:String);
  105. Var tmp:TFileStream;
  106. begin
  107.   tmp:=TFileStream.Create(AName,fmOpenRead);
  108.   try
  109.     LoadTeeFromStream(ATree,tmp);
  110.   finally
  111.     tmp.Free;
  112.   end;
  113. end;
  114.  
  115. { Export Dialog }
  116. procedure TTeeExportForm.Button1Click(Sender: TObject);
  117. begin
  118.   With ExportPanel do
  119.   Case RGFormat.ItemIndex of
  120.     1: CopyToClipboardMetafile(False);
  121.     2: CopyToClipboardMetafile(True);
  122.   else
  123.     CopyToClipboardBitmap;
  124.   end;
  125. end;
  126.  
  127. {$IFDEF TEEJPEG}
  128. Function TeeGetJPEGImageParams( APanel:TCustomTeePanel;
  129.                                 Params:TJPEGDefaults;
  130.                                 AWidth,AHeight:Integer):TJPEGImage;
  131. var tmpBitmap : TBitmap;
  132.     OldWidth,
  133.     OldHeight : Integer;
  134. begin
  135.   result:=TJPEGImage.Create;   { <-- create a TJPEGImage }
  136.   OldWidth:=APanel.Width;
  137.   OldHeight:=APanel.Height;
  138.   tmpBitmap:=TBitmap.Create;   { <-- create a temporary TBitmap }
  139.   try
  140.     tmpBitmap.Width :=AWidth;   { <-- set the bitmap dimensions }
  141.     tmpBitmap.Height:=AHeight;
  142.     { draw the Chart on the temporary Bitmap... }
  143.     APanel.Draw(tmpBitmap.Canvas,Rect(0,0,tmpBitmap.Width,tmpBitmap.Height));
  144.     APanel.Width:=OldWidth;
  145.     APanel.Height:=OldHeight;
  146.     { set the desired JPEG options... }
  147.     With result do
  148.     begin
  149.       GrayScale            :=Params.GrayScale;
  150.       ProgressiveEncoding  :=Params.ProgressiveEncoding;
  151.       CompressionQuality   :=Params.CompressionQuality;
  152.       PixelFormat          :=Params.PixelFormat;
  153.       ProgressiveDisplay   :=Params.ProgressiveDisplay;
  154.       Performance          :=Params.Performance;
  155.       Scale                :=Params.Scale;
  156.       Smoothing            :=Params.Smoothing;
  157.       { Copy the temporary Bitmap onto the JPEG image... }
  158.       Assign(tmpBitmap);
  159.     end;
  160.   finally
  161.     tmpBitmap.Free;  { <-- free the temporary Bitmap }
  162.   end;
  163. end;
  164.  
  165. { This function creates a JPEG Image, sets the desired JPEG
  166.   parameters, draws a Chart (or TeeTree) on it, Saves the JPEG on disk and
  167.   Loads the JPEG from disk to show it on this Form. }
  168. Function TeeGetJPEGImage(APanel:TCustomTeePanel):TJPEGImage;
  169. Var Params:TJPEGDefaults;
  170. begin
  171.   With Params do
  172.   begin
  173.     GrayScale:=False;
  174.     ProgressiveEncoding:=False;
  175.     CompressionQuality:=90;
  176.     PixelFormat:=jf24bit;
  177.     ProgressiveDisplay:=False;
  178.     Performance:=jpBestQuality;
  179.     Scale:=jsFullSize;
  180.     Smoothing:=True;
  181.   end;
  182.   { Create the JPEG with the Chart image }
  183.   result:=TeeGetJPEGImageParams(APanel,Params,APanel.Width,APanel.Height);
  184. end;
  185.  
  186. procedure TeeSaveToJPEGFile( APanel:TCustomTeePanel;
  187.                              const FileName: WideString;
  188.                              Gray: WordBool;
  189.                              Performance: TJPEGPerformance;
  190.                              Quality, AWidth, AHeight: Integer);
  191. var tmp:String;
  192.     tmpWidth,tmpHeight:Integer;
  193.     Params:TJPEGDefaults;
  194. begin
  195.   tmp:=FileName;
  196.   if Pos('.',tmp)=0 then tmp:=tmp+'.jpg';
  197.   { Get the JPEG params }
  198.   Params.GrayScale:=Gray;
  199.   Params.CompressionQuality:=Quality;
  200.   Params.Performance:=Performance;
  201.   if AWidth=0 then tmpWidth:=APanel.Width
  202.               else tmpWidth:=AWidth;
  203.   if AHeight=0 then tmpHeight:=APanel.Height
  204.                else tmpHeight:=AHeight;
  205.   { Create the JPEG with the Chart image }
  206.   With TeeGetJPEGImageParams(APanel,Params,tmpWidth,tmpHeight) do
  207.   try
  208.     SaveToFile(tmp);    { <-- save the JPEG to disk }
  209.   finally
  210.     Free;  { <-- free the temporary JPEG object }
  211.   end;
  212. end;
  213. {$ENDIF}
  214.  
  215. procedure TTeeExportForm.Button2Click(Sender: TObject);
  216. begin
  217.   With SaveDialog1 do
  218.   begin
  219.     DefaultExt:=TeeGetImageExtension(RGFormat.ItemIndex);
  220.     FilterIndex:=1+Ord(RGFormat.ItemIndex);
  221.     FileName:='';
  222.     if Execute then
  223.     With ExportPanel do
  224.     Case FilterIndex-1 of
  225.         0: SaveToBitmapFile(FileName);
  226.         1: SaveToMetafile(FileName);
  227.         2: SaveToMetafileEnh(FileName);
  228.         3: if Assigned(TeeExportSave) then
  229.               TeeExportSave(ExportPanel,FileName)
  230.            else
  231.               SaveTeeToFile(ExportPanel,FileName);
  232.     {$IFDEF TEEJPEG}
  233.         4: TeeSaveToJPEGFile(ExportPanel,FileName,False,jpBestQuality,95,0,0);
  234.     {$ENDIF}
  235.     end;
  236.   end;
  237. end;
  238.  
  239. procedure TTeeExportForm.FormCreate(Sender: TObject);
  240. begin
  241.   {$IFDEF TEEJPEG}
  242.   Height:=Height+32;
  243.   With RGFormat do
  244.   begin
  245.     Height:=Height+32;
  246.     Items.Add(TeeMsg_AsJPEG);
  247.   end;
  248.   {$ENDIF}
  249. end;
  250.  
  251. procedure TTeeExportForm.RGFormatClick(Sender: TObject);
  252. begin
  253.   Button1.Enabled:=RGFormat.ItemIndex<>3;
  254. end;
  255.  
  256. end.
  257.  
  258.